package com.xuwangcheng.file;

import java.io.File;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Scanner;

/**
 * 写一个程序，列出指定目录下的所有文件和子目录、子目录文件的详细信息，包括读写权限、文件名、最后一次修改、文件大小
 * @author xuwangcheng
 *
 */
public class FileTest {
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		System.out.println("输入文件绝对路径:");
		String path = scan.nextLine();
		File f = new File(path);
		if (f.exists()) {
			System.out.println(getFileInfo(f));
			listFiles(f);
		} else {
			System.out.println("文件不存在!");
		}
	}
	
	
	public static void listFiles(File f) {
		for (File file:f.listFiles()) {
			System.out.println(getFileInfo(file));
			if (file.isDirectory()) {
				listFiles(file);
			}
		}
	}
	
	public static String getFileInfo(File f) {
		StringBuilder info = new StringBuilder();
		if (f.exists()) {
			info.append(f.isDirectory() ? "d" : "-");
			info.append(f.canRead() ? "r" : "-");
			info.append(f.canWrite() ? "w" : "-");
			info.append(f.canExecute() ? "x" : "-");
			info.append("  ");
			BigDecimal bd = new BigDecimal((double)f.length() / 1024);
			info.append((bd.setScale(2, BigDecimal.ROUND_DOWN).doubleValue()) + "KB  ");
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			info.append(sdf.format(f.lastModified()) + "  ");
			info.append(f.getName());			
		}
		
		return info.toString();
	}
}
